export namespace ClientConfig {
	export class AIConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 所属ai
		 */
		public AIConfigId: number;

		/**
		 * 此ai中的顺序
		 */
		public Order: number;

		/**
		 * 节点名字
		 */
		public Name: string;

		/**
		 * 节点参数
		 */
		public NodeParams: Array<number>;

		constructor(id: number = 0, aIConfigId: number = 0, order: number = 0, name: string = '', nodeParams: Array<number> = []) {
			this.Id = id;
			this.AIConfigId = aIConfigId;
			this.Order = order;
			this.Name = name;
			this.NodeParams = nodeParams;
		}

		public static Copy(source: AIConfig, destination: AIConfig): void {
			destination.Id = source.Id;

			destination.AIConfigId = source.AIConfigId;

			destination.Order = source.Order;

			destination.Name = source.Name;

			destination.NodeParams.clear();
			destination.NodeParams.addRange(source.NodeParams);
		}

		public static Reset(config: AIConfig): void {
			config.Id = 0;

			config.AIConfigId = 0;

			config.Order = 0;

			config.Name = '';

			config.NodeParams.clear();
		}
	}

	export class CatalogConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 产品简称
		 */
		public ShortName: string;

		/**
		 * 产品类型
		 */
		public Type: string;

		/**
		 * 配置Id
		 */
		public ConfigId: number;

		/**
		 * 资源工程
		 */
		public Resources: Array<string>;

		constructor(id: number = 0, shortName: string = '', type: string = '', configId: number = 0, resources: Array<string> = []) {
			this.Id = id;
			this.ShortName = shortName;
			this.Type = type;
			this.ConfigId = configId;
			this.Resources = resources;
		}

		public static Copy(source: CatalogConfig, destination: CatalogConfig): void {
			destination.Id = source.Id;

			destination.ShortName = source.ShortName;

			destination.Type = source.Type;

			destination.ConfigId = source.ConfigId;

			destination.Resources.clear();
			destination.Resources.addRange(source.Resources);
		}

		public static Reset(config: CatalogConfig): void {
			config.Id = 0;

			config.ShortName = '';

			config.Type = '';

			config.ConfigId = 0;

			config.Resources.clear();
		}
	}

	export class InteractableObjectConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 显示名称
		 */
		public Name: string;

		/**
		 * 场景路径
		 */
		public Path: string;

		/**
		 * 交互对象类型
		 */
		public Type: string;

		/**
		 * 依赖对象
		 */
		public Dependencies: Array<number>;

		constructor(id: number = 0, name: string = '', path: string = '', type: string = '', dependencies: Array<number> = []) {
			this.Id = id;
			this.Name = name;
			this.Path = path;
			this.Type = type;
			this.Dependencies = dependencies;
		}

		public static Copy(source: InteractableObjectConfig, destination: InteractableObjectConfig): void {
			destination.Id = source.Id;

			destination.Name = source.Name;

			destination.Path = source.Path;

			destination.Type = source.Type;

			destination.Dependencies.clear();
			destination.Dependencies.addRange(source.Dependencies);
		}

		public static Reset(config: InteractableObjectConfig): void {
			config.Id = 0;

			config.Name = '';

			config.Path = '';

			config.Type = '';

			config.Dependencies.clear();
		}
	}

	export class LiftingMachineArmConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 托臂身份标识
		 */
		public Identity: number;

		/**
		 * 路径
		 */
		public Path: string;

		constructor(id: number = 0, identity: number = 0, path: string = '') {
			this.Id = id;
			this.Identity = identity;
			this.Path = path;
		}

		public static Copy(source: LiftingMachineArmConfig, destination: LiftingMachineArmConfig): void {
			destination.Id = source.Id;

			destination.Identity = source.Identity;

			destination.Path = source.Path;
		}

		public static Reset(config: LiftingMachineArmConfig): void {
			config.Id = 0;

			config.Identity = 0;

			config.Path = '';
		}
	}

	export class LiftingMachineConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 资源加载路径
		 */
		public Asset: string;

		/**
		 * 父级场景路径
		 */
		public ParentPath: string;

		/**
		 * 最大举升高度
		 */
		public MaxHeight: number;

		/**
		 * 举升速度
		 */
		public Speed: number;

		/**
		 * 位置
		 */
		public Positions: Array<number>;

		/**
		 * 旋转角度
		 */
		public EulerAngles: Array<number>;

		/**
		 * 托臂位置
		 */
		public ArmPositions: Array<number>;

		/**
		 * 托臂配置Id
		 */
		public ArmConfigIds: Array<number>;

		/**
		 * 音频资源路径
		 */
		public AudioClipAsset: string;

		constructor(id: number = 0, asset: string = '', parentPath: string = '', maxHeight: number = 0, speed: number = 0, positions: Array<number> = [], eulerAngles: Array<number> = [], armPositions: Array<number> = [], armConfigIds: Array<number> = [], audioClipAsset: string = '') {
			this.Id = id;
			this.Asset = asset;
			this.ParentPath = parentPath;
			this.MaxHeight = maxHeight;
			this.Speed = speed;
			this.Positions = positions;
			this.EulerAngles = eulerAngles;
			this.ArmPositions = armPositions;
			this.ArmConfigIds = armConfigIds;
			this.AudioClipAsset = audioClipAsset;
		}

		public static Copy(source: LiftingMachineConfig, destination: LiftingMachineConfig): void {
			destination.Id = source.Id;

			destination.Asset = source.Asset;

			destination.ParentPath = source.ParentPath;

			destination.MaxHeight = source.MaxHeight;

			destination.Speed = source.Speed;

			destination.Positions.clear();
			destination.Positions.addRange(source.Positions);

			destination.EulerAngles.clear();
			destination.EulerAngles.addRange(source.EulerAngles);

			destination.ArmPositions.clear();
			destination.ArmPositions.addRange(source.ArmPositions);

			destination.ArmConfigIds.clear();
			destination.ArmConfigIds.addRange(source.ArmConfigIds);

			destination.AudioClipAsset = source.AudioClipAsset;
		}

		public static Reset(config: LiftingMachineConfig): void {
			config.Id = 0;

			config.Asset = '';

			config.ParentPath = '';

			config.MaxHeight = 0;

			config.Speed = 0;

			config.Positions.clear();

			config.EulerAngles.clear();

			config.ArmPositions.clear();

			config.ArmConfigIds.clear();

			config.AudioClipAsset = '';
		}
	}

	export class MillimeterWaveRadarDefinitionConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 类型
		 */
		public Type: string;

		/**
		 * 信号
		 */
		public Sign: string;

		/**
		 * 起始位
		 */
		public StartIndex: string;

		/**
		 * 长度
		 */
		public Length: string;

		/**
		 * 最小值
		 */
		public Min: string;

		/**
		 * 最大值
		 */
		public Max: string;

		/**
		 * 分辨率
		 */
		public Resolution: string;

		/**
		 * 单位
		 */
		public Unit: string;

		/**
		 * 描述
		 */
		public Description: string;

		constructor(id: number = 0, type: string = '', sign: string = '', startIndex: string = '', length: string = '', min: string = '', max: string = '', resolution: string = '', unit: string = '', description: string = '') {
			this.Id = id;
			this.Type = type;
			this.Sign = sign;
			this.StartIndex = startIndex;
			this.Length = length;
			this.Min = min;
			this.Max = max;
			this.Resolution = resolution;
			this.Unit = unit;
			this.Description = description;
		}

		public static Copy(source: MillimeterWaveRadarDefinitionConfig, destination: MillimeterWaveRadarDefinitionConfig): void {
			destination.Id = source.Id;

			destination.Type = source.Type;

			destination.Sign = source.Sign;

			destination.StartIndex = source.StartIndex;

			destination.Length = source.Length;

			destination.Min = source.Min;

			destination.Max = source.Max;

			destination.Resolution = source.Resolution;

			destination.Unit = source.Unit;

			destination.Description = source.Description;
		}

		public static Reset(config: MillimeterWaveRadarDefinitionConfig): void {
			config.Id = 0;

			config.Type = '';

			config.Sign = '';

			config.StartIndex = '';

			config.Length = '';

			config.Min = '';

			config.Max = '';

			config.Resolution = '';

			config.Unit = '';

			config.Description = '';
		}
	}

	export class MillimeterWaveRadarGraphConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 类型
		 */
		public Type: string;

		/**
		 * 索引
		 */
		public Index: number;

		/**
		 * 线
		 */
		public Line: string;

		/**
		 * 左上角
		 */
		public LT: string;

		/**
		 * 左下角
		 */
		public LB: string;

		/**
		 * 背景颜色
		 */
		public Color: string;

		constructor(id: number = 0, type: string = '', index: number = 0, line: string = '', lT: string = '', lB: string = '', color: string = '') {
			this.Id = id;
			this.Type = type;
			this.Index = index;
			this.Line = line;
			this.LT = lT;
			this.LB = lB;
			this.Color = color;
		}

		public static Copy(source: MillimeterWaveRadarGraphConfig, destination: MillimeterWaveRadarGraphConfig): void {
			destination.Id = source.Id;

			destination.Type = source.Type;

			destination.Index = source.Index;

			destination.Line = source.Line;

			destination.LT = source.LT;

			destination.LB = source.LB;

			destination.Color = source.Color;
		}

		public static Reset(config: MillimeterWaveRadarGraphConfig): void {
			config.Id = 0;

			config.Type = '';

			config.Index = 0;

			config.Line = '';

			config.LT = '';

			config.LB = '';

			config.Color = '';
		}
	}

	export class MillimeterWaveRadarProtocolConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 协议
		 */
		public Protocol: string;

		/**
		 * 名称
		 */
		public Name: string;

		/**
		 * 输入/输出
		 */
		public Direction: string;

		/**
		 * 内容描述
		 */
		public Description: string;

		/**
		 * 定义
		 */
		public Definitions: Array<number>;

		/**
		 * 布局
		 */
		public Graphs: Array<number>;

		constructor(id: number = 0, protocol: string = '', name: string = '', direction: string = '', description: string = '', definitions: Array<number> = [], graphs: Array<number> = []) {
			this.Id = id;
			this.Protocol = protocol;
			this.Name = name;
			this.Direction = direction;
			this.Description = description;
			this.Definitions = definitions;
			this.Graphs = graphs;
		}

		public static Copy(source: MillimeterWaveRadarProtocolConfig, destination: MillimeterWaveRadarProtocolConfig): void {
			destination.Id = source.Id;

			destination.Protocol = source.Protocol;

			destination.Name = source.Name;

			destination.Direction = source.Direction;

			destination.Description = source.Description;

			destination.Definitions.clear();
			destination.Definitions.addRange(source.Definitions);

			destination.Graphs.clear();
			destination.Graphs.addRange(source.Graphs);
		}

		public static Reset(config: MillimeterWaveRadarProtocolConfig): void {
			config.Id = 0;

			config.Protocol = '';

			config.Name = '';

			config.Direction = '';

			config.Description = '';

			config.Definitions.clear();

			config.Graphs.clear();
		}
	}

	export class UnitConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * Type
		 */
		public Type: number;

		/**
		 * 名字
		 */
		public Name: string;

		/**
		 * 描述
		 */
		public Desc: string;

		/**
		 * 位置
		 */
		public Position: number;

		/**
		 * 身高
		 */
		public Height: number;

		/**
		 * 体重
		 */
		public Weight: number;

		constructor(id: number = 0, type: number = 0, name: string = '', desc: string = '', position: number = 0, height: number = 0, weight: number = 0) {
			this.Id = id;
			this.Type = type;
			this.Name = name;
			this.Desc = desc;
			this.Position = position;
			this.Height = height;
			this.Weight = weight;
		}

		public static Copy(source: UnitConfig, destination: UnitConfig): void {
			destination.Id = source.Id;

			destination.Type = source.Type;

			destination.Name = source.Name;

			destination.Desc = source.Desc;

			destination.Position = source.Position;

			destination.Height = source.Height;

			destination.Weight = source.Weight;
		}

		public static Reset(config: UnitConfig): void {
			config.Id = 0;

			config.Type = 0;

			config.Name = '';

			config.Desc = '';

			config.Position = 0;

			config.Height = 0;

			config.Weight = 0;
		}
	}

	export class VehicleConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 资源路径
		 */
		public Asset: string;

		/**
		 * 位置
		 */
		public Positions: Array<number>;

		/**
		 * 旋转
		 */
		public EulerAngles: Array<number>;

		/**
		 * 父节点路径
		 */
		public ParentPath: string;

		/**
		 * 音频资源路径
		 */
		public DoorIds: Array<number>;

		constructor(id: number = 0, asset: string = '', positions: Array<number> = [], eulerAngles: Array<number> = [], parentPath: string = '', doorIds: Array<number> = []) {
			this.Id = id;
			this.Asset = asset;
			this.Positions = positions;
			this.EulerAngles = eulerAngles;
			this.ParentPath = parentPath;
			this.DoorIds = doorIds;
		}

		public static Copy(source: VehicleConfig, destination: VehicleConfig): void {
			destination.Id = source.Id;

			destination.Asset = source.Asset;

			destination.Positions.clear();
			destination.Positions.addRange(source.Positions);

			destination.EulerAngles.clear();
			destination.EulerAngles.addRange(source.EulerAngles);

			destination.ParentPath = source.ParentPath;

			destination.DoorIds.clear();
			destination.DoorIds.addRange(source.DoorIds);
		}

		public static Reset(config: VehicleConfig): void {
			config.Id = 0;

			config.Asset = '';

			config.Positions.clear();

			config.EulerAngles.clear();

			config.ParentPath = '';

			config.DoorIds.clear();
		}
	}

	export class VehicleDoorConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 身份标识
		 */
		public Identity: number;

		/**
		 * 路径(相对于车辆)
		 */
		public Path: string;

		/**
		 * 车窗玻璃Id
		 */
		public WindowGlassId: number;

		/**
		 * 后视镜Id
		 */
		public RearviewMirrorId: number;

		/**
		 * 内把手路径(相对于车门)
		 */
		public InnerHandlePath: string;

		/**
		 * 外把手路径(相对于车门)
		 */
		public OuterHandlePath: string;

		/**
		 * 音频资源路径
		 */
		public AudioClipAsset: string;

		constructor(id: number = 0, identity: number = 0, path: string = '', windowGlassId: number = 0, rearviewMirrorId: number = 0, innerHandlePath: string = '', outerHandlePath: string = '', audioClipAsset: string = '') {
			this.Id = id;
			this.Identity = identity;
			this.Path = path;
			this.WindowGlassId = windowGlassId;
			this.RearviewMirrorId = rearviewMirrorId;
			this.InnerHandlePath = innerHandlePath;
			this.OuterHandlePath = outerHandlePath;
			this.AudioClipAsset = audioClipAsset;
		}

		public static Copy(source: VehicleDoorConfig, destination: VehicleDoorConfig): void {
			destination.Id = source.Id;

			destination.Identity = source.Identity;

			destination.Path = source.Path;

			destination.WindowGlassId = source.WindowGlassId;

			destination.RearviewMirrorId = source.RearviewMirrorId;

			destination.InnerHandlePath = source.InnerHandlePath;

			destination.OuterHandlePath = source.OuterHandlePath;

			destination.AudioClipAsset = source.AudioClipAsset;
		}

		public static Reset(config: VehicleDoorConfig): void {
			config.Id = 0;

			config.Identity = 0;

			config.Path = '';

			config.WindowGlassId = 0;

			config.RearviewMirrorId = 0;

			config.InnerHandlePath = '';

			config.OuterHandlePath = '';

			config.AudioClipAsset = '';
		}
	}

	export class VehicleRearviewMirrorConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 身份标识
		 */
		public Identity: number;

		/**
		 * 路径(相对于车辆)
		 */
		public Path: string;

		/**
		 * 触发器路径(相对于车辆)
		 */
		public InnerHandlePath: string;

		/**
		 * 音频资源路径
		 */
		public AudioClipAsset: string;

		constructor(id: number = 0, identity: number = 0, path: string = '', innerHandlePath: string = '', audioClipAsset: string = '') {
			this.Id = id;
			this.Identity = identity;
			this.Path = path;
			this.InnerHandlePath = innerHandlePath;
			this.AudioClipAsset = audioClipAsset;
		}

		public static Copy(source: VehicleRearviewMirrorConfig, destination: VehicleRearviewMirrorConfig): void {
			destination.Id = source.Id;

			destination.Identity = source.Identity;

			destination.Path = source.Path;

			destination.InnerHandlePath = source.InnerHandlePath;

			destination.AudioClipAsset = source.AudioClipAsset;
		}

		public static Reset(config: VehicleRearviewMirrorConfig): void {
			config.Id = 0;

			config.Identity = 0;

			config.Path = '';

			config.InnerHandlePath = '';

			config.AudioClipAsset = '';
		}
	}

	export class VehicleWindowGlassConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 身份标识
		 */
		public Identity: number;

		/**
		 * 路径(相对于车辆)
		 */
		public Path: string;

		/**
		 * 基础触发器路径(相对于车辆)
		 */
		public BaseTriggerPath: string;

		/**
		 * 举升触发器路径(相对于车辆)
		 */
		public UpTriggerPath: string;

		/**
		 * 下降触发器路径(相对于车辆)
		 */
		public DownTriggerPath: string;

		/**
		 * 音频资源路径
		 */
		public AudioClipAsset: string;

		constructor(id: number = 0, identity: number = 0, path: string = '', baseTriggerPath: string = '', upTriggerPath: string = '', downTriggerPath: string = '', audioClipAsset: string = '') {
			this.Id = id;
			this.Identity = identity;
			this.Path = path;
			this.BaseTriggerPath = baseTriggerPath;
			this.UpTriggerPath = upTriggerPath;
			this.DownTriggerPath = downTriggerPath;
			this.AudioClipAsset = audioClipAsset;
		}

		public static Copy(source: VehicleWindowGlassConfig, destination: VehicleWindowGlassConfig): void {
			destination.Id = source.Id;

			destination.Identity = source.Identity;

			destination.Path = source.Path;

			destination.BaseTriggerPath = source.BaseTriggerPath;

			destination.UpTriggerPath = source.UpTriggerPath;

			destination.DownTriggerPath = source.DownTriggerPath;

			destination.AudioClipAsset = source.AudioClipAsset;
		}

		public static Reset(config: VehicleWindowGlassConfig): void {
			config.Id = 0;

			config.Identity = 0;

			config.Path = '';

			config.BaseTriggerPath = '';

			config.UpTriggerPath = '';

			config.DownTriggerPath = '';

			config.AudioClipAsset = '';
		}
	}

	export class ViewConfig implements Chaos.IConfig {
		/**
		 * Id
		 */
		public Id: number;

		/**
		 * 视角名称
		 */
		public Name: string;

		/**
		 * 视角目标路径
		 */
		public Path: string;

		/**
		 * 水平角度
		 */
		public HorizontalAngle: number;

		/**
		 * 垂直角度
		 */
		public VerticalAngle: number;

		/**
		 * 距离
		 */
		public Distance: number;

		/**
		 * 水平角度速度
		 */
		public HorizontalSpeed: number;

		/**
		 * 垂直角度速度
		 */
		public VerticalSpeed: number;

		/**
		 * 距离速度
		 */
		public DistanceSpeed: number;

		constructor(id: number = 0, name: string = '', path: string = '', horizontalAngle: number = 0, verticalAngle: number = 0, distance: number = 0, horizontalSpeed: number = 0, verticalSpeed: number = 0, distanceSpeed: number = 0) {
			this.Id = id;
			this.Name = name;
			this.Path = path;
			this.HorizontalAngle = horizontalAngle;
			this.VerticalAngle = verticalAngle;
			this.Distance = distance;
			this.HorizontalSpeed = horizontalSpeed;
			this.VerticalSpeed = verticalSpeed;
			this.DistanceSpeed = distanceSpeed;
		}

		public static Copy(source: ViewConfig, destination: ViewConfig): void {
			destination.Id = source.Id;

			destination.Name = source.Name;

			destination.Path = source.Path;

			destination.HorizontalAngle = source.HorizontalAngle;

			destination.VerticalAngle = source.VerticalAngle;

			destination.Distance = source.Distance;

			destination.HorizontalSpeed = source.HorizontalSpeed;

			destination.VerticalSpeed = source.VerticalSpeed;

			destination.DistanceSpeed = source.DistanceSpeed;
		}

		public static Reset(config: ViewConfig): void {
			config.Id = 0;

			config.Name = '';

			config.Path = '';

			config.HorizontalAngle = 0;

			config.VerticalAngle = 0;

			config.Distance = 0;

			config.HorizontalSpeed = 0;

			config.VerticalSpeed = 0;

			config.DistanceSpeed = 0;
		}
	}

}
